Skip to content

Lab-1 | Dinning Programmers | Барковская Мария Александровна#9

Open
mmmmarryyy wants to merge 4 commits intomasterfrom
master
Open

Lab-1 | Dinning Programmers | Барковская Мария Александровна#9
mmmmarryyy wants to merge 4 commits intomasterfrom
master

Conversation

@mmmmarryyy
Copy link

No description provided.


public Restaurant(int programmersCount, int waiterCount, int portionsCount) {
this.portionsCount = new AtomicInteger(portionsCount);
this.portionsAskQueue = new LinkedBlockingQueue<>();

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Кажется, что при выборе LinkedBlockingQueue и достаточном разбросе скорости поедания ваши тесты на равномерную еду провалятся. Либо расскажите, что обеспечивает у вас равномерность?

Copy link
Author

@mmmmarryyy mmmmarryyy Oct 1, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Я подходила к размышлению так:

  1. Иерархия ресурсов (ложек) помогает предотвращать голодание и deadlock
  2. Случайные временные интервалы, которые я проставила для think() и eat(), имеют случайную длительность за счет рандома, что естественным образом перемешивает порядок (при этом в среднем, каждый программист примерно одинаково со всеми тратит время на поесть и примерно одинаково со всеми тратит время на подумать)
  3. За счет LinkedBlockingQueue у нас все программисты равны в очереди на обслуживание, то есть кто первый попросил порцию еды, тот первый ее и получил, это кажется логичным

И, кажется, все это как раз суммарно дает нам равномерность, что мы можем видеть, например, по логам в сообщении выше
Вообще, я подбирала структуры данных в самом начале, еще когда думала как строить код, каким у меня будут классы, какие в них будут поля и методы, чтобы понять, как это все вместе должно работать, и я тогда рассматривала альтернативы и смотрела еще в сторону PriorityBlockingQueue, но в тот момент мне это не показалось хорошей идеей, потому что из альтернатив, что можно считать приоритетом был только id программиста, а это кажется, привело бы к несправедливости, когда программисты с меньшими id всегда получали бы преимущество
Сейчас, пока я писала ответ, мне в голову пришла идея, что, кажется, как альтернативу можно использовать PriorityBlockingQueue с приоритетом в виде количества уже съеденных порций программистом. Это тоже поможет нам достичь равномерности распределения еды, потому что еда всегда в первую очередь будет доставаться тому, кто меньше поел (но у меня почему-то есть какие-то внутренние сомнения по такому решению, как будто тут есть какой-то подвох, не знаю, почему)

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Я и подводил к PriorityBlockingQueue с приоритетом по голоду, так действительно все бы ели справедливо) Будет здорово, если к защите переделаете, но не обязательно

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants